﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Service
/// </summary>
public class Service
{
    #region Variables

    private UserCredentialsDAL _userCredentialsDAL;
    private TopicDAL _topicDAL;
    private CommentDAL _commentDAL;
    private ForumDAL _forumDAL;
    private LoggEntryDAL _loggEntryDAL;

    #endregion 


    #region Properties


    public UserCredentialsDAL UserCredentialsDAL
    {      // om det som är till vänster om ?? = null, så utförs det till höger.
        get { return _userCredentialsDAL ?? (_userCredentialsDAL = new UserCredentialsDAL()); }
    }

    public TopicDAL TopicDAL
    {      // om det som är till vänster om ?? = null, så utförs det till höger.
        get { return _topicDAL ?? (_topicDAL = new TopicDAL()); }
    }

    public CommentDAL CommentDAL
    {      // om det som är till vänster om ?? = null, så utförs det till höger.
        get { return _commentDAL ?? (_commentDAL = new CommentDAL()); }
    }

    public ForumDAL ForumDAL
    {      // om det som är till vänster om ?? = null, så utförs det till höger.
        get { return _forumDAL ?? (_forumDAL = new ForumDAL()); }
    }

    public LoggEntryDAL LoggEntryDAL
    {      // om det som är till vänster om ?? = null, så utförs det till höger.
        get { return _loggEntryDAL ?? (_loggEntryDAL = new LoggEntryDAL()); }
    }

    

    #endregion 


    #region UserCredentials

    public void SaveUserCredentials(UserCredentials userC)
    {
        if (userC != null && userC.UserID == 0) //TODO, kan göra så som jag gjort på projektet, och kolla att den är valid och inte bara null.
        {
           //Save new user.
            UserCredentialsDAL.NewUserCredentials(userC);
 
        }
        else
        {
            // och om vi gör som projektet så kan vi göra om det här med felmeddelandet.
            //TODO: Rätta till felmeddelandet sen.
            throw new Exception("Här har vi ett fel din sopa. 'SaveUserCredentials' i Service.. ");
        }
    }


    public void UpdateUserEmailAndSignatureOnUserID(UserCredentials userC)
    {
        UserCredentialsDAL.UpdateUserEmailAndSignatureOnUserID(userC);
    }

    public void UpdateUserPasswordOnUserID(UserCredentials userC)
    {
        UserCredentialsDAL.UpdateUserPasswordOnUserID(userC);
    }

    public UserCredentials GetUserCredentialsOnUsername(string username)
    {
        return UserCredentialsDAL.UserCredentialsOnUsername(username);
    }


    public UserCredentials GetUserCredentialsOnID(int id)
    {
        return UserCredentialsDAL.UserCredentialsOnID(id);
    }

    #endregion 


    #region FORUM

    public List<Forum> GetAllForumPosts()
    {
        return ForumDAL.GetAllForumPosts();
    }

    #endregion 



    public OneTopic GetTopicOnID(int topicID)
    {
        return TopicDAL.GetTopicOnID(topicID);
    }


    public void SaveTopic(OneTopic topic)
    {
        if (topic != null) //TODO, kan göra så som jag gjort på projektet, och kolla att den är valid och inte bara null.
        {
            if (topic.TopicID == 0)
            {
                //Save new user.
                TopicDAL.NewTopic(topic);
            }
            else
            {
                //Update existing user on userC.UserID.
                TopicDAL.UpdateTopicContentOnTopicID(topic);
            }
        }
        else
        {
            // och om vi gör som projektet så kan vi göra om det här med felmeddelandet.
            //TODO: Rätta till felmeddelandet sen.
            throw new Exception("Här har vi ett fel din sopa. 'SaveUserCredentials' i Service.. ");
        }
    }


    public void DeleteTopicOnID(int topicID)
    {
        TopicDAL.DeleteTopicOnID(topicID);
    }


    public void DeleteCommentOnID(int CommentID)
    {
        CommentDAL.DeleteCommentOnID(CommentID);
    }

    public void SaveComment(Comment comment)
    {
        if (comment != null) //TODO, kan göra så som jag gjort på projektet, och kolla att den är valid och inte bara null.
        {
            if (comment.CommentID == 0)
            {
                //Save new comment.
                CommentDAL.NewComment(comment);
            }
            else
            {
                //Update existing user on userC.UserID.
                //UserCredentialsDAL.UpdateUserCredentials(userC);
            }
        }
        else
        {
            // och om vi gör som projektet så kan vi göra om det här med felmeddelandet.
            //TODO: Rätta till felmeddelandet sen.
            throw new Exception("Här har vi ett fel din sopa. 'SaveUserCredentials' i Service.. ");
        }
    }

    public List<Comment> GetAllCommentsOnTopicID(int topicID)
    {
        return CommentDAL.GetAllCommentsOnTopicID(topicID);
    }



    public void SaveLoggEntry(LoggEntry loggEntry)
    {
        if (loggEntry != null) //TODO, kan göra så som jag gjort på projektet, och kolla att den är valid och inte bara null.
        {
            if (loggEntry.LoggID == 0)
            {
                //Save new loggEntry.
                LoggEntryDAL.NewLoggEntry(loggEntry);
            }
        }
        else
        {
            throw new Exception("Här har vi ett fel din sopa. 'SaveUserCredentials' i Service.. ");
        }
    }

    
}